with Ada.Text_IO;use Ada.Text_IO;
with Ada.Exceptions;use Ada.Exceptions;

package body T_Mobile is

-- Implementation du telephone fixe
	task body Mobile is

	-- Si la variable est a vrai, le telephone n'est pas utilisable
		enPanne : boolean := false;
	-- Numeros du telephone courant
		monNum : Integer := unNum;
	-- Indique si le telephone est en cours de communication
		enLigne : boolean := false;
	-- TODO: Ajouter un attribut standard qui pointe vers le standard de l'environnement

		begin
			while(not(enPanne)) loop
				select
				----------------------------------------------------------------------------------
				-- Signalisation de l'appel entrant
					accept APPEL_ENTRANT
					do
						put_line("bip bip bip");
					exception
						when E : others =>
							put_line("Le Telephone est tombe en panne");
					end APPEL_ENTRANT;
				----------------------------------------------------------------------------------
				or
				----------------------------------------------------------------------------------
				-- Le client decroche le combine
					accept DECROCHER
					do
						put_line("decrochage");
						enLigne := true;
					end DECROCHER;
				----------------------------------------------------------------------------------
				or
				----------------------------------------------------------------------------------
				-- Le Client peut parler quand il a decroche le combine
					accept PARLER(maVoix : out STRING)
					do
						if (enLigne) then
						-- Attention il faut que le message communique soit de la meme
						-- taille que maVoix :/
							put_line("je parle:");
							maVoix := "allo?";
						else
							maVoix:= "";
						end if;
					end PARLER;
				----------------------------------------------------------------------------------
				or
				----------------------------------------------------------------------------------
				-- Le Client peut ecouter quand il a decroche le combine
					accept ECOUTER(saVoix : in STRING)
					do
						if (enLigne) then
							put_line("j'ecoute:");
							put_line(saVoix);
						end if;
					end ECOUTER;
				----------------------------------------------------------------------------------
				or
				----------------------------------------------------------------------------------
				-- Mettre fin a la conversation
					accept RACCROCHER
					do
						enLigne := false;
					end RACCROCHER;
				----------------------------------------------------------------------------------
				or
				----------------------------------------------------------------------------------
				-- Notifier au Standard que l'on veut appeller un numéros
					accept APPELER(destinataire : in Integer)
					do
					-- Appel à la fonction connexion du Standard
						put_line("la communication passe par le standard");

					end APPELER;
				----------------------------------------------------------------------------------
				end select;
			end loop;
			exception
			when E : others =>
				put_line("Erreur dans la tache Fixe");
				put("Exception Identity : ");
				put_line(Exception_Name(Exception_Identity(E)));
				put("Exception Name : ");
				put_line(Exception_Name(E));
				put("Exception message : ");
				put_line(Exception_Message(E));
				put("Exception information : ");
				put_line(Exception_Information(E));
		end Mobile;

end T_Mobile;

------------------------------------------------------------------------------------------------------------------
-- IDEES EN VRAC

----------------
-- Mettre une variable nbUtilisation qui se decremente a chaque fois que le telephone est utilise.
-- Une fois arrivee a zero, le telephone tombe en panne
----------------